package serveur;

import java.io.IOException;
import java.util.Timer;

public class Partie {
	int nbjoueurs;
	int indice;
	Joueur[] joueurs;
	boolean pleine;
	boolean fin;
	String winner;

	Partie(int indice){
		nbjoueurs = 0;
		joueurs = new Joueur[4];
		this.indice = indice;
		for(int i=0; i<4; i++){
			joueurs[i]=null;
		}
		pleine = false;
		fin = false;
	}

	synchronized boolean ajoutJoueur(Joueur j){
		if(nbjoueurs <=4){
			joueurs[nbjoueurs] = j;
			nbjoueurs++;
			pleine= true;
			if(nbjoueurs == 2){
				Timer t = new Timer();
				t.schedule(new TimerPartie(this), 30000);
			}
		}
		return pleine;
	}

	void afficheListeJoueurs(){
		int i=0;
		for(Joueur j : joueurs){
			if (j != null)
				System.out.println(i+" - nom :"+j.getNom());
		}
	}

	public void startPartie() {

		try {
			//Construction du message players à envoyer
			String msg = Commande.PLAYERS;
			for(int i=0; i<nbjoueurs; i++){
				msg += joueurs[i].getNom()+"/";
			}
			msg+="\n";

			//Envoi du message de debut
			for(int i=0; i<nbjoueurs; i++){
				joueurs[i].sendMessage(msg, false);
			}

			for(int i=0; i<nbjoueurs; i++){
				joueurs[i].getPlacerNavires().start();
			}
			
			//On attend que tous les joueurs aient places leurs bateaux :)
			for(int i=0; i<nbjoueurs; i++){
				joueurs[i].getPlacerNavires().join();
			}



			//TODO Gestion du jeu drone & cie

		} catch (IOException e) {
			System.err.println("Pb envoi msg debut partie");
			e.printStackTrace();
		} catch (InterruptedException e) {
			System.err.println("Un joueur s'est déconnecté.");
			e.printStackTrace();
		}

		while(!fin){		}

		for(int i=0; i<nbjoueurs; i++){
			String endMsg = Commande.AWINNERIS+winner;
			try {
				joueurs[i].sendMessage(endMsg,true);
			} catch (IOException e) {
				System.err.println("Impossible d'envoyer le message de fin");
				e.printStackTrace();
			}
		}
	}


	public int getNbjoueurs() {
		return nbjoueurs;
	}

	public void setNbjoueurs(int nbjoueurs) {
		this.nbjoueurs = nbjoueurs;
	}

	public int getIndice() {
		return indice;
	}

	public void setIndice(int indice) {
		this.indice = indice;
	}

	public Joueur[] getJoueurs() {
		return joueurs;
	}

	public boolean isPleine() {
		return pleine;
	}
}